1 module hip.hipaudio.backend.webaudio.source; 2 3 version(WebAssembly): 4 5 extern(C) size_t WebAudioSourceCreate(); 6 extern(C) void WebAudioSourceStop(size_t src); 7 extern(C) void WebAudioSourceSetData(size_t src, size_t buffer); 8 extern(C) void WebAudioSourceSetPlaying(size_t src, bool playing); 9 extern(C) void WebAudioSourceSetLooping(size_t src, bool shouldLoop); 10 extern(C) void WebAudioSourceSetPitch(size_t src, float pitch); 11 extern(C) void WebAudioSourceSetVolume(size_t src, float volume); 12 extern(C) void WebAudioSourceSetPlaybackRate(size_t src, float rate); 13 14 import hip.hipaudio.backend.webaudio.player; 15 import hip.hipaudio.backend.webaudio.clip; 16 import hip.hipaudio.audiosource; 17 import hip.error.handler; 18 19 20 class HipWebAudioSource : HipAudioSource 21 { 22 protected bool isClipDirty = true; 23 protected size_t webSrc = 0; 24 25 this(HipWebAudioPlayer player){webSrc = WebAudioSourceCreate();} 26 alias clip = HipAudioSource.clip; 27 28 29 override IHipAudioClip clip(IHipAudioClip newClip) 30 { 31 if(newClip != clip) 32 isClipDirty = true; 33 34 WebAudioSourceSetData(webSrc, getBufferFromAPI(newClip).webaudio); 35 super.clip(newClip); 36 return newClip; 37 } 38 39 alias loop = HipAudioSource.loop; 40 override bool loop(bool value) 41 { 42 bool ret = super.loop(value); 43 WebAudioSourceSetLooping(webSrc, value); 44 return ret; 45 } 46 47 48 override bool play() 49 { 50 WebAudioSourceSetPlaying(webSrc, true); 51 return true; 52 } 53 override bool stop() 54 { 55 WebAudioSourceStop(webSrc); 56 return true; 57 } 58 override bool pause() 59 { 60 WebAudioSourceSetPlaying(webSrc, false); 61 return true; 62 } 63 override bool play_streamed() => false; 64 65 66 ~this(){webSrc = 0;} 67 }